package com.lwl.office.dcconverter.element;

import com.lwl.office.webeditor.ParserContext;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * 表格
 */
@Data
public class DCTable extends AbsDCElement{
    /**
     * 行数
     */
    private int rowNum;
    /**
     * 列数
     */
    private int colNum;
    /**
     * 表格合并位图
     * 下面这个位图表示该表格是一个3*3，并没有合并单元格的表格
     *  1 2 3
     *  4 5 6
     *  7 8 9
     *  下面这个位图表示该表格是一个3*3，并有一个合并行[(0,0),(1,0)]和一个合并列[(1,1),(1,2)]的表格
     *  1 2 3
     *  1 5 5
     *  7 8 9
     */
    private int[][] mergeMap;

    /**
     * 判断表格是否有合并单元格
     * @return
     */
    public boolean hasMerge(){
        return !(mergeMap[rowNum-1][colNum-1] == rowNum*colNum);
    }

    /**
     * 获取所有的单元格
     * @return
     */
    public List<DCTableCell> getCell(){
        List<DCTableCell> dctcs = new ArrayList<>();
        for (AbsDCElement child : getChildren()) {
            for (AbsDCElement cell : child.getChildren()) {
                dctcs.add((DCTableCell) cell);
            }
        }
        return dctcs;
    }

    public DCTable(int rowNum, int colNum) {
        this.rowNum = rowNum;
        this.colNum = colNum;
        this.mergeMap = new int[rowNum][colNum];
    }


    public DCTableRow addRow() {
        DCTableRow dctr = new DCTableRow();
        addChild(dctr);
        return dctr;
    }

    @Override
    public String toHtml() {
        StringBuilder stb = new StringBuilder();
        stb.append("<table  width=\"100%\"><tbody>");
        for (AbsDCElement row : getChildren()) {
            stb.append(row.toHtml());
        }
        stb.append("</tbody></table>");
        return stb.toString();
    }

    @Override
    public void parseWord(ParserContext context) {

    }
}
